eeprom16 2.2.1
Loading...
Searching...
No Matches
eeprom16.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2026 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
27
28#ifndef EEPROM16_H
29#define EEPROM16_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_spi_master.h"
52#include "spi_specifics.h"
53
59
64
69
74#define EEPROM16_OPCODE_WREN 0x06
75#define EEPROM16_OPCODE_WRDI 0x04
76#define EEPROM16_OPCODE_RDSR 0x05
77#define EEPROM16_OPCODE_WRSR 0x01
78#define EEPROM16_OPCODE_READ 0x03
79#define EEPROM16_OPCODE_WRITE 0x02
80 // eeprom16_reg
82
87
92
97#define EEPROM16_STATUS_WPEN_MASK 0x80
98#define EEPROM16_STATUS_IPL_MASK 0x40
99#define EEPROM16_STATUS_BLOCK_PROTECT_NONE 0x00
100#define EEPROM16_STATUS_BLOCK_PROTECT_UPPER_QUARTER 0x04
101#define EEPROM16_STATUS_BLOCK_PROTECT_UPPER_HALF 0x08
102#define EEPROM16_STATUS_BLOCK_PROTECT_ALL 0x0C
103#define EEPROM16_STATUS_BLOCK_PROTECT_MASK 0x0C
104#define EEPROM16_STATUS_WEL_MASK 0x02
105#define EEPROM16_STATUS_RDY_MASK 0x01
106
111#define EEPROM16_MIN_ADDRESS 0x0000
112#define EEPROM16_MAX_ADDRESS 0x0FFF
113#define EEPROM16_PAGE_SIZE 32
114#define EEPROM16_PAGE_MASK 0x1F
115
124#define EEPROM16_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
125#define EEPROM16_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
126 // eeprom16_set
128
133
138
143#define EEPROM16_MAP_MIKROBUS( cfg, mikrobus ) \
144 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
145 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
146 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
147 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
148 cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
149 cfg.hold = MIKROBUS( mikrobus, MIKROBUS_INT )
150 // eeprom16_map // eeprom16
153
158typedef struct
159{
160 // Output pins
161 digital_out_t wp;
162 digital_out_t hold;
163
164 // Modules
165 spi_master_t spi;
166
167 pin_name_t chip_select;
168
169} eeprom16_t;
170
175typedef struct
176{
177 // Communication gpio pins
178 pin_name_t miso;
179 pin_name_t mosi;
180 pin_name_t sck;
181 pin_name_t cs;
182
183 // Additional gpio pins
184 pin_name_t wp;
185 pin_name_t hold;
186
187 // static variable
188 uint32_t spi_speed;
189 spi_master_mode_t spi_mode;
190 spi_master_chip_select_polarity_t cs_polarity;
191
193
198typedef enum
199{
202
204
210
221
236
250
262err_t eeprom16_write_opcode ( eeprom16_t *ctx, uint8_t opcode );
263
278err_t eeprom16_read_opcode ( eeprom16_t *ctx, uint8_t opcode, uint8_t *data_out, uint8_t len );
279
289void eeprom16_set_wp_pin ( eeprom16_t *ctx, uint8_t state );
290
300void eeprom16_set_hold_pin ( eeprom16_t *ctx, uint8_t state );
301
313
325
340err_t eeprom16_set_block_protection ( eeprom16_t *ctx, uint8_t block_protect );
341
353err_t eeprom16_write_status ( eeprom16_t *ctx, uint8_t status );
354
366err_t eeprom16_read_status ( eeprom16_t *ctx, uint8_t *status );
367
382err_t eeprom16_memory_write ( eeprom16_t *ctx, uint16_t address, uint8_t *data_in, uint8_t len );
383
398err_t eeprom16_memory_read ( eeprom16_t *ctx, uint16_t address, uint8_t *data_out, uint16_t len );
399
400#ifdef __cplusplus
401}
402#endif
403#endif // EEPROM16_H
404 // eeprom16
406
407// ------------------------------------------------------------------------ END
eeprom16_return_value_t
EEPROM 16 Click return value data.
Definition eeprom16.h:199
@ EEPROM16_OK
Definition eeprom16.h:200
@ EEPROM16_ERROR
Definition eeprom16.h:201
err_t eeprom16_disable_write(eeprom16_t *ctx)
EEPROM 16 disable write function.
err_t eeprom16_enable_write(eeprom16_t *ctx)
EEPROM 16 enable write function.
void eeprom16_set_wp_pin(eeprom16_t *ctx, uint8_t state)
EEPROM 16 set WP pin function.
err_t eeprom16_init(eeprom16_t *ctx, eeprom16_cfg_t *cfg)
EEPROM 16 initialization function.
err_t eeprom16_default_cfg(eeprom16_t *ctx)
EEPROM 16 default configuration function.
err_t eeprom16_set_block_protection(eeprom16_t *ctx, uint8_t block_protect)
EEPROM 16 set block protection function.
void eeprom16_cfg_setup(eeprom16_cfg_t *cfg)
EEPROM 16 configuration object setup function.
err_t eeprom16_memory_read(eeprom16_t *ctx, uint16_t address, uint8_t *data_out, uint16_t len)
EEPROM 16 memory read function.
err_t eeprom16_write_status(eeprom16_t *ctx, uint8_t status)
EEPROM 16 write status function.
err_t eeprom16_memory_write(eeprom16_t *ctx, uint16_t address, uint8_t *data_in, uint8_t len)
EEPROM 16 memory write function.
void eeprom16_set_hold_pin(eeprom16_t *ctx, uint8_t state)
EEPROM 16 set HOLD pin function.
err_t eeprom16_write_opcode(eeprom16_t *ctx, uint8_t opcode)
EEPROM 16 write opcode function.
err_t eeprom16_read_status(eeprom16_t *ctx, uint8_t *status)
EEPROM 16 read status function.
err_t eeprom16_read_opcode(eeprom16_t *ctx, uint8_t opcode, uint8_t *data_out, uint8_t len)
EEPROM 16 read opcode function.
This file contains SPI specific macros, functions, etc.
EEPROM 16 Click configuration object.
Definition eeprom16.h:176
spi_master_chip_select_polarity_t cs_polarity
Definition eeprom16.h:190
pin_name_t sck
Definition eeprom16.h:180
spi_master_mode_t spi_mode
Definition eeprom16.h:189
pin_name_t mosi
Definition eeprom16.h:179
uint32_t spi_speed
Definition eeprom16.h:188
pin_name_t wp
Definition eeprom16.h:184
pin_name_t miso
Definition eeprom16.h:178
pin_name_t hold
Definition eeprom16.h:185
pin_name_t cs
Definition eeprom16.h:181
EEPROM 16 Click context object.
Definition eeprom16.h:159
spi_master_t spi
Definition eeprom16.h:165
digital_out_t hold
Definition eeprom16.h:162
pin_name_t chip_select
Definition eeprom16.h:167
digital_out_t wp
Definition eeprom16.h:161